home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
basic
/
chaosexe.zip
/
XMOTION.TRU
< prev
next >
Wrap
Text File
|
1980-01-01
|
2KB
|
71 lines
!
!PROGRAM TITLE "XMOTION"
LIBRARY "SGLIB.TRC"
DIM A(1),B(1)
!
CLEAR
print" ***PENDULUM - ANIMATION OF ITS MOTION***"
PRINT"This program draws the motion of the pendulum at equal time intervals."
PRINT
INPUT prompt"Input driving force strength (0.5 to 1.5):":g
INPUT prompt"input damping ,q (2 to 4):":q
INPUT prompt"Input initial position:":xint
INPUT Prompt"Input initial velocity:":vint
INPUT prompt"Input min. and max. time:":tmin,tmax
INPUT prompt"Input drive angular frequency (try .666666666):":w
LET tstep=.5
!SET WINDOW -1,1,-1,1
!BOX LINES -.95,.95,-.95,.95
CALL SETXSCALE(-1,1)
CALL SETYSCALE(-1,1)
CALL SETAXES(0)
CALL SETTICKSIZES(0,0)
CALL SETTITLE("PENDULUM ANIMATION")
DATA 0,0
CALL DATAGRAPH(A,B,0,0,"WHITE")
CALL GOTOCANVAS
PICTURE Pendulum
SET COLOR "white"
FOR k=1 to 2
IF k=2 then SET COLOR "black"
PLOT LINES:0,0;0,-.5;.05,-.5;.05,-.55;-.05,-.55;-.05,-.5;0,-.5
NEXT k
END PICTURE
FOR i=1 to 1000000
CALL rk4(x,v,tstep,xnew,vnew,t,w,g,q)
LET t=t+tstep
LET x=xnew
LET v=vnew
IF t>tmin then
LET angle=x
DRAW pendulum with rotate(angle)
PLOT
END IF
IF t>tmax then LET i=1000001
NEXT i
get key variable
CLEAR
END
DEF accel(x,v,t,w,g,q)
LET accel= -sin(x)-(1/q)*v+g*cos(w*t)
END DEF
SUB rk4(x,v,tstep,xnew,vnew,t,w,g,q)
DECLARE DEF accel
LET xk1=tstep*v
LET vk1=tstep*accel(x,v,t,w,g,q)
LET xk2=tstep*(v+vk1/2)
LET vk2=tstep*accel(x+xk1/2,v+vk1/2,t+tstep/2,w,g,q)
LET xk3=tstep*(v+vk2/2)
LET vk3=tstep*accel(x+xk2/2,v+vk2/2,t+tstep/2,w,g,q)
LET xk4=tstep*(v+vk3)
LET vk4=tstep*accel(x+xk3,v+vk3,t+tstep,w,g,q)
LET vnew=v+(vk1+2*vk2+2*vk3+vk4)/6
LET xnew=x+(xk1+2*xk2+2*xk3+xk4)/6
END SUB